package java6699.lesson02;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;

import java.util.Arrays;

/**
 * 字符串sort6699
 *
 * @author 周梓希
 * @date 2022/09/05
 */
public class StringSort6699 extends Application {
    /**
     * 主要
     * 调用Application的launch启动javaFX程序
     * @param args
     */
    public static void main(String[] args) {
        launch(args);
    }

    /**
     * 开始
     * 重写start方法
     *
     * @param primaryStage 初级阶段
     * @throws Exception 异常
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(getRoot());
        primaryStage.setScene(scene); //指定Scene
        primaryStage.setTitle("字符串中的数字排序");
        primaryStage.show();
    }
    /**
     * 得到根
     * 创建根节点
     *
     * @return {@link Parent}
     */
    private Parent getRoot() {
        Label lblStudent = new Label("212106699周梓希");
        //边框【注意】多行代码的书写规范
        BorderStroke bs = new BorderStroke(Paint.valueOf("#8FBC8F")//边框的颜色
                , BorderStrokeStyle.DOTTED//边框的样式
                , new CornerRadii(10)//边框四个角的圆角
                , new BorderWidths(3));//边框的宽度
        lblStudent.setBorder(new Border(bs));//设置边框
        lblStudent.setPadding(new Insets(10));//设置边距
        //水平排列的两个控件，用于输入
        HBox hText = new HBox(10);
        Label lblText = new Label("输入数字串：");
        TextField tfText = new TextField();
        tfText.setPromptText("用空格分隔的数字串");//文本无内容时显示的提示信息
        hText.getChildren().addAll(lblText, tfText);
        hText.setAlignment(Pos.CENTER_LEFT);//两个控件的对齐方式
        Button button = new Button("排序");
        Label lblPrint = new Label();//显示排序结果
        //垂直排列的根节点
        VBox root = new VBox(20);//节点之间的垂直间距20
        //为根节点添加子节点
        root.getChildren().addAll(lblStudent, hText, button, lblPrint);
        root.setPadding(new Insets(20.0));//设置根节点的边距
        root.setAlignment(Pos.TOP_CENTER);//根节点中各节点的对齐方式
        root.setStyle("-fx-font-size:20");//用CSS样式设置容器中所有节点的字体大小

        button.setOnAction(new EventHandler<ActionEvent>() {
            /**
             * 处理字符串数组
             *
             * 1：通过使用button.setOnAction(new EventHandler<ActionEvent>()匿名监听按钮注册
             * 2：将字符串数组的每个元素强转为Integer类型并存入int数组
             * 3：对int数组进行从小到大的顺序排序，将排序后的int数组重新组装成一个字符串
             * 4：转为字符串，去除最后一个空格,trim()用于删除字符串的头尾空白符
             *
             * @param event 事件
             */
            @Override
            public void handle(ActionEvent event) {
                String[] strArray = tfText.getText().split(" ");
                //将字符串数组转换为int数组
                int[] arr = new int[strArray.length];
                for (int i = 0; i < arr.length; i++) {
                    //将字符串数组的每个元素强转为Integer类型并存入int数组
                    arr[i] = Integer.parseInt(strArray[i]);
                }
                Arrays.sort(arr);   //对int数组进行从小到大的顺序排序
                //将排序后的int数组重新组装成一个字符串
                StringBuilder stringBuilder = new StringBuilder();
                for (int value : arr) {
                    stringBuilder.append(value).append(" ");   //在每个元素后加空格
                }
                //转为字符串，去除最后一个空格,trim()用于删除字符串的头尾空白符
                String result = stringBuilder.toString().trim();
                //返回排序后的字符串给标签
                lblPrint.setText("排序结果：" + result);
            }
        });
        return root;
    }
}
